Micron Document
🎖️GitЯра🎖️


Displaying Raw • Download

feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/NodeDetailsSection.kt 2d20cd8a4708e2ef66e98d5259f3a97ec93f240a (2d20cd8a) Text, 15.96 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tf0883e@fileTb4b4b4:Te6edf3SuppressTb4b4b4(Ta5d6ff"Ta5d6ffTooManyFunctionsTa5d6ff"Tb4b4b4)

Tff7b72package T7ee787org.meshtastic.feature.node.component

Tff7b72import T7ee787androidx.compose.animation.animateContentSize
Tff7b72import T7ee787androidx.compose.foundation.ExperimentalFoundationApi
Tff7b72import T7ee787androidx.compose.foundation.combinedClickable
Tff7b72import T7ee787androidx.compose.foundation.layout.Column
Tff7b72import T7ee787androidx.compose.foundation.layout.Row
Tff7b72import T7ee787androidx.compose.foundation.layout.Spacer
Tff7b72import T7ee787androidx.compose.foundation.layout.defaultMinSize
Tff7b72import T7ee787androidx.compose.foundation.layout.fillMaxWidth
Tff7b72import T7ee787androidx.compose.foundation.layout.height
Tff7b72import T7ee787androidx.compose.foundation.layout.padding
Tff7b72import T7ee787androidx.compose.foundation.layout.size
Tff7b72import T7ee787androidx.compose.foundation.layout.width
Tff7b72import T7ee787androidx.compose.material3.Icon
Tff7b72import T7ee787androidx.compose.material3.MaterialTheme
Tff7b72import T7ee787androidx.compose.material3.Surface
Tff7b72import T7ee787androidx.compose.material3.Text
Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787androidx.compose.runtime.getValue
Tff7b72import T7ee787androidx.compose.runtime.mutableStateOf
Tff7b72import T7ee787androidx.compose.runtime.remember
Tff7b72import T7ee787androidx.compose.runtime.rememberCoroutineScope
Tff7b72import T7ee787androidx.compose.runtime.setValue
Tff7b72import T7ee787androidx.compose.ui.Alignment
Tff7b72import T7ee787androidx.compose.ui.Modifier
Tff7b72import T7ee787androidx.compose.ui.platform.Clipboard
Tff7b72import T7ee787androidx.compose.ui.platform.LocalClipboard
Tff7b72import T7ee787androidx.compose.ui.semantics.Role
Tff7b72import T7ee787androidx.compose.ui.semantics.contentDescription
Tff7b72import T7ee787androidx.compose.ui.semantics.semantics
Tff7b72import T7ee787androidx.compose.ui.text.font.FontFamily
Tff7b72import T7ee787androidx.compose.ui.text.font.FontWeight
Tff7b72import T7ee787androidx.compose.ui.text.style.TextAlign
Tff7b72import T7ee787androidx.compose.ui.unit.dp
Tff7b72import T7ee787kotlinx.coroutines.launch
Tff7b72import T7ee787org.jetbrains.compose.resources.stringResource
Tff7b72import T7ee787org.meshtastic.core.common.util.MetricFormatter
Tff7b72import T7ee787org.meshtastic.core.model.DeviceHardware
Tff7b72import T7ee787org.meshtastic.core.model.Node
Tff7b72import T7ee787org.meshtastic.core.model.NodeAddress
Tff7b72import T7ee787org.meshtastic.core.model.util.formatUptime
Tff7b72import T7ee787org.meshtastic.core.resources.Res
Tff7b72import T7ee787org.meshtastic.core.resources.a11y_label_value
Tff7b72import T7ee787org.meshtastic.core.resources.copy
Tff7b72import T7ee787org.meshtastic.core.resources.details
Tff7b72import T7ee787org.meshtastic.core.resources.encryption_error
Tff7b72import T7ee787org.meshtastic.core.resources.encryption_error_text
Tff7b72import T7ee787org.meshtastic.core.resources.error
Tff7b72import T7ee787org.meshtastic.core.resources.hops_away
Tff7b72import T7ee787org.meshtastic.core.resources.node_id
Tff7b72import T7ee787org.meshtastic.core.resources.node_number
Tff7b72import T7ee787org.meshtastic.core.resources.node_sort_last_heard
Tff7b72import T7ee787org.meshtastic.core.resources.public_key
Tff7b72import T7ee787org.meshtastic.core.resources.role
Tff7b72import T7ee787org.meshtastic.core.resources.rssi
Tff7b72import T7ee787org.meshtastic.core.resources.security_signed_node
Tff7b72import T7ee787org.meshtastic.core.resources.security_signed_node_desc
Tff7b72import T7ee787org.meshtastic.core.resources.short_name
Tff7b72import T7ee787org.meshtastic.core.resources.snr
Tff7b72import T7ee787org.meshtastic.core.resources.status_message
Tff7b72import T7ee787org.meshtastic.core.resources.supported
Tff7b72import T7ee787org.meshtastic.core.resources.transport
Tff7b72import T7ee787org.meshtastic.core.resources.uptime
Tff7b72import T7ee787org.meshtastic.core.resources.user_id
Tff7b72import T7ee787org.meshtastic.core.ui.component.SignedNodeDialog
Tff7b72import T7ee787org.meshtastic.core.ui.component.transportInfo
Tff7b72import T7ee787org.meshtastic.core.ui.icon.ArrowCircleUp
Tff7b72import T7ee787org.meshtastic.core.ui.icon.DeviceNumbers
Tff7b72import T7ee787org.meshtastic.core.ui.icon.History
Tff7b72import T7ee787org.meshtastic.core.ui.icon.HopCount
Tff7b72import T7ee787org.meshtastic.core.ui.icon.KeyOff
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Lock
Tff7b72import T7ee787org.meshtastic.core.ui.icon.MeshtasticIcons
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Notes
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Person
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Rssi
Tff7b72import T7ee787org.meshtastic.core.ui.icon.ShieldCheck
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Snr
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Verified
Tff7b72import T7ee787org.meshtastic.core.ui.icon.role
Tff7b72import T7ee787org.meshtastic.core.ui.theme.StatusColors.StatusGreen
Tff7b72import T7ee787org.meshtastic.core.ui.util.createClipEntry
Tff7b72import T7ee787org.meshtastic.core.ui.util.formatAgo
Tff7b72import T7ee787org.meshtastic.proto.MeshPacket.TransportMechanism
Tff7b72import T7ee787kotlin.io.encoding.Base64
Tff7b72import T7ee787kotlin.io.encoding.ExperimentalEncodingApi

Tf0883e@Composable
Tff7b72fun Td2a8ffNodeDetailsSectionTb4b4b4(
Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4,
Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4,
Te6edf3deviceHardwareTb4b4b4: Te6edf3DeviceHardware? Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3reportedTargetTb4b4b4: Tffa657String? Tff7b72= Tff7b72nullTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3SectionCardTb4b4b4(Te6edf3title Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3detailsTb4b4b4, Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4) Tb4b4b4{
Te6edf3ColumnTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3animateContentSizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3nodeTb4b4b4.Te6edf3mismatchKeyTb4b4b4) Tb4b4b4{
Te6edf3MismatchKeyWarningTb4b4b4(Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3ModifierTb4b4b4.Te6edf3heightTb4b4b4(T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3deviceHardware Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3DeviceHeroSectionTb4b4b4(
Te6edf3bgColor Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3colorsTb4b4b4.Te6edf3secondTb4b4b4.Te6edf3toLongTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3deviceHardware Tff7b72= Te6edf3deviceHardwareTb4b4b4,
Te6edf3reportedTarget Tff7b72= Te6edf3reportedTargetTb4b4b4,
Tb4b4b4)
Te6edf3SectionDividerTb4b4b4(Tb4b4b4)
Tb4b4b4}
Te6edf3MainNodeDetailsTb4b4b4(Te6edf3nodeTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffMismatchKeyWarningTb4b4b4(Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4) Tb4b4b4{
Te6edf3SurfaceTb4b4b4(
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3errorContainerTb4b4b4,
Te6edf3shape Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3shapesTb4b4b4.Te6edf3largeTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3ColumnTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4, Te6edf3horizontalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterHorizontallyTb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3KeyOffTb4b4b4,
Te6edf3contentDescription Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3tint Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onErrorContainerTb4b4b4,
Tb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3ModifierTb4b4b4.Te6edf3widthTb4b4b4(T79c0ff1T79c0ff2.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3encryption_errorTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3titleMediumTb4b4b4,
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onErrorContainerTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3SpacerTb4b4b4(Te6edf3ModifierTb4b4b4.Te6edf3heightTb4b4b4(T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3encryption_error_textTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodySmallTb4b4b4,
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onErrorContainerTb4b4b4,
Te6edf3textAlign Tff7b72= Te6edf3TextAlignTb4b4b4.Te6edf3CenterTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffMainNodeDetailsTb4b4b4(Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4) Tb4b4b4{
Te6edf3Column Tb4b4b4{
Te6edf3NameAndRoleRowTb4b4b4(Te6edf3nodeTb4b4b4)
Te6edf3nodeTb4b4b4.Te6edf3nodeStatusTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3status Tff7b72-Tff7b72>
Te6edf3SectionDividerTb4b4b4(Tb4b4b4)
Te6edf3StatusMessageRowTb4b4b4(Te6edf3statusTb4b4b4)
Tb4b4b4}
Te6edf3SectionDividerTb4b4b4(Tb4b4b4)
Te6edf3NodeIdentificationRowTb4b4b4(Te6edf3nodeTb4b4b4)
Te6edf3SectionDividerTb4b4b4(Tb4b4b4)
Te6edf3HearsAndHopsRowTb4b4b4(Te6edf3nodeTb4b4b4)
Te6edf3SectionDividerTb4b4b4(Tb4b4b4)
Te6edf3UserAndUptimeRowTb4b4b4(Te6edf3nodeTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3nodeTb4b4b4.Te6edf3hopsAway Tff7b72=Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Tff7b72!Te6edf3nodeTb4b4b4.Te6edf3viaMqttTb4b4b4) Tb4b4b4{
Te6edf3SectionDividerTb4b4b4(Tb4b4b4)
Te6edf3SignalRowTb4b4b4(Te6edf3nodeTb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3nodeTb4b4b4.Te6edf3viaMqtt Tff7b72|Tff7b72| Te6edf3nodeTb4b4b4.Te6edf3lastTransport Tff7b72!Tff7b72= Te6edf3TransportMechanismTb4b4b4.Te6edf3TRANSPORT_INTERNALTb4b4b4.Te6edf3valueTb4b4b4) Tb4b4b4{
Te6edf3SectionDividerTb4b4b4(Tb4b4b4)
Te6edf3TransportRowTb4b4b4(Te6edf3nodeTb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3nodeTb4b4b4.Te6edf3manuallyVerified Tff7b72|Tff7b72| Te6edf3nodeTb4b4b4.Te6edf3signsPacketsTb4b4b4) Tb4b4b4{
Te6edf3SectionDividerTb4b4b4(Tb4b4b4)
Te6edf3VerificationRowTb4b4b4(Te6edf3nodeTb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3publicKey Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3publicKey Tff7b72?: Te6edf3nodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3public_key
Tff7b72if Tb4b4b4(Te6edf3publicKeyTb4b4b4.Te6edf3size Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3SectionDividerTb4b4b4(Tb4b4b4)
Te6edf3PublicKeyItemTb4b4b4(Te6edf3publicKeyTb4b4b4.Te6edf3toByteArrayTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffNameAndRoleRowTb4b4b4(Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3InfoItemTb4b4b4(
Te6edf3label Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3short_nameTb4b4b4)Tb4b4b4,
Te6edf3value Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3short_nameTb4b4b4.Te6edf3ifEmpty Tb4b4b4{ Ta5d6ff"Ta5d6ff???Ta5d6ff" Tb4b4b4}Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3PersonTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3InfoItemTb4b4b4(
Te6edf3label Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3roleTb4b4b4)Tb4b4b4,
Te6edf3value Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3roleTb4b4b4.Te6edf3nameTb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3roleTb4b4b4(Te6edf3nodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3roleTb4b4b4)Tb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffStatusMessageRowTb4b4b4(Te6edf3statusTb4b4b4: Tffa657StringTb4b4b4) Tb4b4b4{
Te6edf3InfoItemTb4b4b4(
Te6edf3label Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3status_messageTb4b4b4)Tb4b4b4,
Te6edf3value Tff7b72= Te6edf3statusTb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3NotesTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffNodeIdentificationRowTb4b4b4(Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3InfoItemTb4b4b4(
Te6edf3label Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3node_idTb4b4b4)Tb4b4b4,
Te6edf3value Tff7b72= Te6edf3NodeAddressTb4b4b4.Te6edf3numToDefaultIdTb4b4b4(Te6edf3nodeTb4b4b4.Te6edf3numTb4b4b4)Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3DeviceNumbersTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3InfoItemTb4b4b4(
Te6edf3label Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3node_numberTb4b4b4)Tb4b4b4,
Te6edf3value Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3numTb4b4b4.Te6edf3toUIntTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3DeviceNumbersTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffHearsAndHopsRowTb4b4b4(Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3InfoItemTb4b4b4(
Te6edf3label Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3node_sort_last_heardTb4b4b4)Tb4b4b4,
Te6edf3value Tff7b72= Te6edf3formatAgoTb4b4b4(Te6edf3nodeTb4b4b4.Te6edf3lastHeardTb4b4b4)Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3HistoryTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3nodeTb4b4b4.Te6edf3hopsAway Tff7b72>Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3InfoItemTb4b4b4(
Te6edf3label Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3hops_awayTb4b4b4)Tb4b4b4,
Te6edf3value Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3hopsAwayTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3HopCountTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3SpacerTb4b4b4(Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffUserAndUptimeRowTb4b4b4(Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3uptimeSeconds Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3deviceMetricsTb4b4b4.Te6edf3uptime_seconds
Te6edf3InfoItemTb4b4b4(
Te6edf3label Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3user_idTb4b4b4)Tb4b4b4,
Te6edf3value Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3userTb4b4b4.Te6edf3idTb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3PersonTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3uptimeSeconds Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3uptimeSeconds Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3InfoItemTb4b4b4(
Te6edf3label Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3uptimeTb4b4b4)Tb4b4b4,
Te6edf3value Tff7b72= Te6edf3formatUptimeTb4b4b4(Te6edf3uptimeSecondsTb4b4b4)Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ArrowCircleUpTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3SpacerTb4b4b4(Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffSignalRowTb4b4b4(Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3snr Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3snrOrNull
Tff7b72if Tb4b4b4(Te6edf3snr Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3InfoItemTb4b4b4(
Te6edf3label Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3snrTb4b4b4)Tb4b4b4,
Te6edf3value Tff7b72= Te6edf3MetricFormatterTb4b4b4.Te6edf3snrTb4b4b4(Te6edf3snrTb4b4b4)Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3SnrTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3SpacerTb4b4b4(Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3rssi Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3rssiOrNull
Tff7b72if Tb4b4b4(Te6edf3rssi Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3InfoItemTb4b4b4(
Te6edf3label Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3rssiTb4b4b4)Tb4b4b4,
Te6edf3value Tff7b72= Te6edf3MetricFormatterTb4b4b4.Te6edf3rssiTb4b4b4(Te6edf3rssiTb4b4b4)Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3RssiTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3SpacerTb4b4b4(Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

T8b949e/** How this node was last heard — LoRa / MQTT / UDP / API. Hidden for internally-generated (own) packets. */
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffTransportRowTb4b4b4(Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4) Tb4b4b4{
Tff7b72val Tb4b4b4(Te6edf3iconTb4b4b4, Te6edf3labelTb4b4b4) Tff7b72= Te6edf3transportInfoTb4b4b4(Te6edf3nodeTb4b4b4.Te6edf3lastTransportTb4b4b4, Te6edf3nodeTb4b4b4.Te6edf3viaMqttTb4b4b4) Tff7b72?: Tff7b72return
Te6edf3RowTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3InfoItemTb4b4b4(
Te6edf3label Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3transportTb4b4b4)Tb4b4b4,
Te6edf3value Tff7b72= Te6edf3labelTb4b4b4,
Te6edf3icon Tff7b72= Te6edf3iconTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

T8b949e/** Trust signals: automatic XEdDSA signing (left, tappable) and user-asserted key verification (right). */
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffVerificationRowTb4b4b4(Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3nodeTb4b4b4.Te6edf3signsPacketsTb4b4b4) Tb4b4b4{
Te6edf3SignedNodeItemTb4b4b4(Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3SpacerTb4b4b4(Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3nodeTb4b4b4.Te6edf3manuallyVerifiedTb4b4b4) Tb4b4b4{
Te6edf3InfoItemTb4b4b4(
Te6edf3label Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3supportedTb4b4b4)Tb4b4b4,
Te6edf3value Tff7b72= Ta5d6ff"Ta5d6ffVerifiedTa5d6ff"Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3VerifiedTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3SpacerTb4b4b4(Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

T8b949e/** "Signed node" trust cell — tap opens the plain-language explanation ([SignedNodeDialog]). */
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffSignedNodeItemTb4b4b4(Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4) Tb4b4b4{
Tff7b72var Te6edf3showDialog Tff7b72by Te6edf3remember Tb4b4b4{ Te6edf3mutableStateOfTb4b4b4(Tff7b72falseTb4b4b4) Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3showDialogTb4b4b4) Te6edf3SignedNodeDialogTb4b4b4(Te6edf3onDismiss Tff7b72= Tb4b4b4{ Te6edf3showDialog Tff7b72= Tff7b72false Tb4b4b4}Tb4b4b4)
Te6edf3InfoItemTb4b4b4(
Te6edf3label Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3security_signed_nodeTb4b4b4)Tb4b4b4,
Te6edf3value Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3security_signed_node_descTb4b4b4)Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ShieldCheckTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4,
Te6edf3iconTint Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3StatusGreenTb4b4b4,
Te6edf3iconSize Tff7b72= T79c0ff2T79c0ff0.Te6edf3dpTb4b4b4,
Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3showDialog Tff7b72= Tff7b72true Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalFoundationApiTff7b72::Te6edf3classTb4b4b4, Te6edf3ExperimentalEncodingApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffPublicKeyItemTb4b4b4(Te6edf3publicKeyBytesTb4b4b4: Te6edf3ByteArrayTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3clipboardTb4b4b4: Te6edf3Clipboard Tff7b72= Te6edf3LocalClipboardTb4b4b4.Te6edf3current
Tff7b72val Te6edf3coroutineScope Tff7b72= Te6edf3rememberCoroutineScopeTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3isMismatch Tff7b72= Te6edf3publicKeyBytesTb4b4b4.Te6edf3all Tb4b4b4{ Tffa657it Tff7b72=Tff7b72= T79c0ff0.Te6edf3toByteTb4b4b4(Tb4b4b4) Tb4b4b4} Tff7b72&Tff7b72& Te6edf3publicKeyBytesTb4b4b4.Te6edf3size Tff7b72=Tff7b72= T79c0ff3T79c0ff2
Tff7b72val Te6edf3publicKeyBase64 Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3isMismatchTb4b4b4) Tb4b4b4{
Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3errorTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3Base64Tb4b4b4.Te6edf3DefaultTb4b4b4.Te6edf3encodeTb4b4b4(Te6edf3publicKeyBytesTb4b4b4)Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3label Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3public_keyTb4b4b4)
Tff7b72val Te6edf3copyLabel Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3copyTb4b4b4)
Tff7b72val Te6edf3contentDescriptionText Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3a11y_label_valueTb4b4b4, Te6edf3labelTb4b4b4, Te6edf3publicKeyBase64Tb4b4b4)

Te6edf3ColumnTb4b4b4(
Te6edf3modifier Tff7b72=
Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3defaultMinSizeTb4b4b4(Te6edf3minHeight Tff7b72= T79c0ff4T79c0ff8.Te6edf3dpTb4b4b4)
Tb4b4b4.Te6edf3combinedClickableTb4b4b4(
Te6edf3onLongClick Tff7b72= Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3isMismatchTb4b4b4) Tb4b4b4{
Te6edf3coroutineScopeTb4b4b4.Te6edf3launch Tb4b4b4{ Te6edf3clipboardTb4b4b4.Te6edf3setClipEntryTb4b4b4(Te6edf3createClipEntryTb4b4b4(Te6edf3publicKeyBase64Tb4b4b4, Te6edf3labelTb4b4b4)Tb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3onLongClickLabel Tff7b72= Te6edf3copyLabelTb4b4b4,
Te6edf3onClick Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3role Tff7b72= Te6edf3RoleTb4b4b4.Te6edf3ButtonTb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff2T79c0ff0.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff8.Te6edf3dpTb4b4b4)
Tb4b4b4.Te6edf3semanticsTb4b4b4(Te6edf3mergeDescendants Tff7b72= Tff7b72trueTb4b4b4) Tb4b4b4{ Te6edf3contentDescription Tff7b72= Te6edf3contentDescriptionText Tb4b4b4}Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3LockTb4b4b4,
Te6edf3contentDescription Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(T79c0ff1T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3tint Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3isMismatchTb4b4b4) Tb4b4b4{
Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3error
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3primaryTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3alpha Tff7b72= T79c0ff0.8fTb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3ModifierTb4b4b4.Te6edf3widthTb4b4b4(T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3labelTb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3labelSmallTb4b4b4,
Te6edf3color Tff7b72= Tff7b72if Tb4b4b4(Te6edf3isMismatchTb4b4b4) Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3error Tff7b72else Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceVariantTb4b4b4,
Te6edf3fontWeight Tff7b72= Te6edf3FontWeightTb4b4b4.Te6edf3BoldTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3SpacerTb4b4b4(Te6edf3ModifierTb4b4b4.Te6edf3heightTb4b4b4(T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3publicKeyBase64Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodySmallTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3fontFamily Tff7b72= Te6edf3FontFamilyTb4b4b4.Te6edf3MonospaceTb4b4b4)Tb4b4b4,
Te6edf3color Tff7b72= Tff7b72if Tb4b4b4(Te6edf3isMismatchTb4b4b4) Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3error Tff7b72else Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.2s